package model;

import java.util.ArrayList;
import java.util.List;
import static org.mockito.Mockito.*;

import junit.framework.TestCase;

public class UsuarioTestCase extends TestCase {

	private List<String> areas = new ArrayList<String>();
	private CasillaDeCorreo mailMock = mock(CasillaDeCorreo.class);
	private Usuario usuario; 
	
	public void setUp() throws Exception {
		
		this.areas.add("a");
		this.areas.add("b");
		usuario =  new Usuario("diego", "maradona", "elDiego", "1234", this.areas, this.mailMock);
	}

	public void testConstructor(){
		
		assertEquals("diego", this.usuario.getNombre());
		assertEquals("maradona", this.usuario.getApellido());
		assertEquals("elDiego", this.usuario.getUserName());
		assertEquals("1234", this.usuario.getPassword());
		assertEquals(this.areas, this.usuario.getAreasDeExperiencia());
		assertEquals(this.mailMock, this.usuario.getCasillaDeCorreo());
	}
	
	
	public void testEsMiTrabajo(){
		Trabajo tpMock = mock(Trabajo.class);
		when(tpMock.getAutor()).thenReturn(usuario);
		
		this.usuario.esMiTrabajo(tpMock);
		
		verify(tpMock).getAutor();
	}
	
	public void testCrearAsignacion(){
		
		Rol rolMock = mock(Rol.class);
		this.usuario.crearAsignacion("el CFP de Tito", rolMock);
		this.usuario.getAsignaciones().containsKey("el CFP de Tito");
		
	}
	
	public void testSeleccionarAsignacion(){
		
		Rol rolMock = mock(Rol.class);
		this.usuario.crearAsignacion("el CFP de Tito", rolMock);
		assertSame(rolMock, this.usuario.seleccionarAsignacion("el CFP de Tito"));
	}
	
	
	public void testAgregarTrabajo(){
		CFP cfpMock = mock(CFP.class);
		when(cfpMock.getNombre()).thenReturn("CFP");
		
		Rol rolMock = mock(Rol.class);
		
		this.usuario.crearAsignacion("CFP", rolMock);
		
		
		Trabajo trabajoMock = mock(Trabajo.class);
		
		this.usuario.agregarTrabajo(trabajoMock, cfpMock);
		
		verify(cfpMock).getNombre();
		verify(rolMock).agregarTrabajo(trabajoMock);
		
	}
	
	public void testVerMails(){
		
		this.usuario.verMails();
		verify(this.mailMock).getCorreosRecibidos();
	}
}
